﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Contract.Business.Process;
using Contract.Business.Entity;

namespace Fast.Presentation.WinForms.Cruds
{
    public partial class FrmSaidaChegada : Form
    {
        public FrmSaidaChegada()
        {
            InitializeComponent();
        }

        #region Atributos

        BPSaidaChegada processSaidaChegada;

        #endregion

        #region Eventos
        private void btnConfirmar_Click(object sender, EventArgs e)
        {
            try
            {
                List<BESaidaChegada> saidasChegadas = montarSaidaChegada();

                processSaidaChegada = new BPSaidaChegada();
                processSaidaChegada.SalvarLista(saidasChegadas);

                Utilidades.ExibirMensagem("Saídas/Entradas registradas");

                this.Close();
            }
            catch (Exception ex)
            {
                Utilidades.LogarError(ex);
                MessageBox.Show(Utilidades.BuscarMensagemError());
            }
        }

        private void frmSaidaChegada_Load(object sender, EventArgs e)
        {
            try
            {
                this.dgvSaidaChegada.AutoGenerateColumns = false;
                carregarMotoboy();
            }
            catch (Exception ex)
            {
                Utilidades.LogarError(ex);
                MessageBox.Show(Utilidades.BuscarMensagemError());
            }
        }

        private void cboMotoboy_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                carregarSaidaChegada();
            }
            catch (Exception ex)
            {
                Utilidades.LogarError(ex);
                MessageBox.Show(Utilidades.BuscarMensagemError());
            }
        }

        private void dgvSaidaChegada_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                int rowIndex = e.RowIndex;

                if (e.ColumnIndex == 0 && (this.dgvSaidaChegada.Rows[rowIndex].Cells[0].Value == null || bool.Parse(this.dgvSaidaChegada.Rows[rowIndex].Cells[0].Value.ToString())))
                {
                    if (this.dgvSaidaChegada.Rows[rowIndex].Cells[4].Value == null)
                        this.dgvSaidaChegada.Rows[rowIndex].Cells[4].Value = DateTime.Now.ToShortTimeString();
                    else
                        this.dgvSaidaChegada.Rows[rowIndex].Cells[5].Value = DateTime.Now.ToShortTimeString();
                }
            }
            catch (Exception ex)
            {
                Utilidades.LogarError(ex);
                MessageBox.Show(Utilidades.BuscarMensagemError());
            }
        }
        #endregion

        #region Métodos
        private List<BESaidaChegada> montarSaidaChegada()
        {
            List<BESaidaChegada> saidasChegadas = new List<BESaidaChegada>();

            BESaidaChegada entidade;
            foreach (DataGridViewRow row in dgvSaidaChegada.Rows)
            {
                if (bool.Parse(row.Cells[0].Value.ToString()) && row.Cells[4].Value != null)
                {
                    entidade = new BESaidaChegada();

                    entidade.CodigoVenda = int.Parse(row.Cells[1].Value.ToString());
                    entidade.CodigoMotoboy = int.Parse(this.cboMotoboy.SelectedValue.ToString());
                    entidade.HoraSaida = row.Cells[4].Value.ToString();

                    if (row.Cells[5].Value != null)
                        entidade.HoraChegada = row.Cells[5].Value.ToString();

                    saidasChegadas.Add(entidade);
                }
            }

            return saidasChegadas;
        }

        private void carregarMotoboy()
        {
            try
            {
                this.cboMotoboy.DisplayMember = "Nome";
                this.cboMotoboy.ValueMember = "Codigo";
                this.cboMotoboy.DataSource = UtilidadesListas.buscarMotoboys();
            }
            catch (Exception ex)
            {
                Utilidades.LogarError(ex);
                MessageBox.Show(Utilidades.BuscarMensagemError());
            }
        }

        private void carregarSaidaChegada()
        {
            try
            {
                if (int.Parse(this.cboMotoboy.SelectedValue.ToString()) > 0)
                {
                    processSaidaChegada = new BPSaidaChegada();
                    List<BESaidaChegada> saidaChegadas = processSaidaChegada.ObterTodosEmAberto(int.Parse(this.cboMotoboy.SelectedValue.ToString()));

                    if (saidaChegadas.Count == 0)
                    {
                        Utilidades.ExibirMensagem("Não existe nenhuma venda em aberto.");
                        this.dgvSaidaChegada.DataSource = new List<BESaidaChegada>();
                    }
                    else
                        this.dgvSaidaChegada.DataSource = saidaChegadas.OrderByDescending(q => q.Codigo).ToList();
                }
                else
                    this.dgvSaidaChegada.DataSource = new List<BESaidaChegada>();
            }
            catch (Exception ex)
            {
                Utilidades.LogarError(ex);
                MessageBox.Show(Utilidades.BuscarMensagemError());
            }
        }
        #endregion
    }
}
